package net.web.belerofont.action.support;

import java.util.Stack;

import net.web.belerofont.action.Interceptor;
import net.web.belerofont.action.Invoker;
import net.web.belerofont.action.InvokerContext;
import net.web.belerofont.action.URIMap;

public class InvokerStackSupport implements Invoker {
	private InvokerContext context;
	private Stack<Interceptor> stack;

	private InvokerStackSupport() {

	}

	public static Invoker instance(InvokerContext context, Stack<Interceptor> stack) {
		InvokerStackSupport invoke = new InvokerStackSupport();
		invoke.context = context;
		invoke.stack = stack;
		return invoke;
	}

	public URIMap invoke() {
		if (!stack.isEmpty()) {
			return stack.pop().intercept(this);
		} else {
			return context.getAction().execute(context.getHttpRequest(), context.getHttpResponse());
		}

	}

	public InvokerContext getContext() {
		return context;
	}

}
